package co.com.travelsoft.ati.daos;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import co.com.travelsoft.ati.entities.Eventos;
import co.com.travelsoft.ati.exception.TravelSoftException;
import co.com.travelsoft.ati.utils.FabricaSesionesUtil;

/**
 * Clase que permite el manejo de la persistencia de
 * la tabla EVENTOS
 * 
 * @author Luis Eduardo
 *
 */
public class EventosDAO {
	
	/**
	 * Permite crear un evento.
	 * @param eventos 
	 * @throws TravelSoftException 
	 */
	public static void crear(Eventos eventos) throws TravelSoftException{
		Session s = FabricaSesionesUtil.getInstancia().getCurrentSession();
		Transaction trx = null;
		try {
			trx = s.beginTransaction();
			s.save(eventos);
			trx.commit();
		} catch (Exception e) {
			if(trx!=null && trx.isActive()){
				trx.rollback();
				throw new TravelSoftException("Ha sucedido un error al intentar crear un evento.", e);
			}
		}
	}
	
	/**
	 * Permite buscar un evento por su identificacion.
	 * @param eventos
	 * @return Eventos : un objeto evento
	 */
	public static Eventos buscarPorId(Eventos eventos){
		Session s = FabricaSesionesUtil.getInstancia().getCurrentSession();
		Transaction trx = s.beginTransaction();
		Eventos usuario =  (Eventos)s.createQuery("select c from Eventos as c where c.codigo = :codigo").
				setParameter("codigo", eventos.getCodigo()).uniqueResult();
        trx.commit();
        return usuario;
		
	}
	
	/**
	 * Permite listar todos los eventos existentes.
	 * @return List<Eventos> : una lista de eventos
	 */
	public static List<Eventos> listar(){
		Session s = FabricaSesionesUtil.getInstancia().getCurrentSession();
    	Transaction trx = s.beginTransaction();
    	List<Eventos> eventos= s.createQuery("select c from Eventos as c").list();
        trx.commit();
        return eventos;
	 }
	
	/**
	 * Permite actualizar la informacion de un evento.
	 * @param eventos
	 * @throws TravelSoftException 
	 */
	public static void actualizar(Eventos eventos) throws TravelSoftException{
		Session s = FabricaSesionesUtil.getInstancia().getCurrentSession();
		Transaction trx = null;
		try {
			trx = s.beginTransaction();
			s.update(eventos);
			trx.commit();
		} catch (Exception e) {
			if(trx!=null && trx.isActive()){
				trx.rollback();
				throw new TravelSoftException("Ha sucedido un error al intentar actualizar un evento.", e);
			}
		}
	}
	
	/**
	 * Permite borrar un evento.
	 * @param eventos
	 * @throws TravelSoftException 
	 */
	public static void borrar(Eventos eventos) throws TravelSoftException{
		Session s = FabricaSesionesUtil.getInstancia().getCurrentSession();
		Transaction trx = null;
		try {
			trx = s.beginTransaction();
			s.delete(eventos);
			trx.commit();
		} catch (Exception e) {
			if(trx!=null && trx.isActive()){
				trx.rollback();
				throw new TravelSoftException("Ha sucedido un error al intentar borrar un evento.", e);
			}
		}
	}

}
